package com.greate.community.dao.admin;

import com.greate.community.entity.Permission;
import com.greate.community.entity.Role;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 权限Rbac 映射
 */
@Mapper
public interface RBACMapper {

    /**
     * 添加角色
     * @param roleName 角色名
     * @param roleDesc 角色描述
     */
     void addRole(@Param("roleName") String roleName, @Param("roleDesc") String roleDesc);

    /**
     * 添加权限
     * @param permName 权限名
     * @param permTag 权限url
     */
     void addPermission(@Param("permName") String permName,@Param("permTag")String permTag,@Param("url") String url);

    /**
     * 添加userId 和roleId的映射
     * @param userId
     * @param roleId
     */
     void addUserRole(@Param("userId")int userId,@Param("roleId")int roleId);

    /**
     * 添加RoleId和PermId的映射
     * @param roleId
     * @param permId
     */
     void addRolePermission(@Param("roleId")int roleId,@Param("permId")int permId);

    /**
     * 获得所有角色信息
     * @return
     */
    List<Role> selectAllRoles();

    /**
     * 通过用户名获得角色id
     * @param roleName
     */
    int  selectRoleIdByName(String roleName);

    /**
     * role_permission表  添加角色及对应权限
     * @param roleId
     * @param permissions
     */
    void insertRolePermissions(@Param("roleId") int roleId,@Param("permissions") List<Integer> permissions);


    /**
     * 更新role表中角色信息
     * @param role
     */
    void updateRoleInfo(@Param("role") Role role);

    /**
     * role_permission表中  删除角色及其对应的权限
     * @param roleId
     */
    void deleteRolePermission(int roleId);

    /**
     * 删除角色通过userId
     * @param roleId
     */
    void deleteRoleById(int roleId);

    /**
     * 更新权限
     * @param permission
     */
    void updatePermission(@Param("permission") Permission permission);

    /**
     * 通过权限Id删除 权限
     * @param permissionId
     */
    void deleteRolePermissionByPermissionId(int permissionId);

    /**
     * 通过权限Id删除角色权限表中 有该权限的数据
     * @param permissionId
     */
    void deletePermissionById(int permissionId);


    /**
     * 获得所有权限信息
     * @return
     */
    List<Permission> getAllPermission();

    /**
     * 通过角色Id获得权限信息
     * @param roleId
     * @return
     */
    List<Integer> selectPermissionIdsByRoleId(int roleId);

    /**
     * 设置默认的角色权限
     * @param permissionIds
     * @return
     */
    void setDefaultRolePermission(List<Integer> permissionIds);

    /**
     * 清除所有默认权限
     */
    void deleteAllDefaultPermission();

    /**
     * 获得角色默认权限
     * @return
     */
    List<Integer> getAllDefaultRolePermission();

    /**
     * 用户对应的权限
     * @param userId
     * @return
     */
    List<Permission> getPermissionByUserId(int userId);
}
